'''
Created on 16 mars 2011

@author: wp803469

    FFT image reelle: question 4.3
    IL FAUT JUSTE CHANGER LE CHEMIN VERS L'IMAGE A OUVRIR

'''

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import numpy as np
import Image

def main():
    
    im = Image.open('train.png').convert('I') # faut pas oublier de passer l'image dans ce format sinon ca marche pas
    im = im.rotate(90)
    SZ = im.size[0]
    print "debug de l'image:",im.format, im.size, im.mode
    
    plt.figure(1)
    plt.clf()
    plt.imshow(im, cmap=plt.cm.gray_r, interpolation="Nearest",origin="lower")
    #plt.show()
    
    # fft
    F1 = np.fft.fft2(im)
    F2 = np.fft.fftshift(F1)
    
    # Calculate a 2D magnitude spectrum
    '''
    psd2D =np.abs(F2)
    fig = plt.figure(2)
    plt.clf()
    X = range(0,SZ)
    Y = range(0,SZ)
    X, Y = np.meshgrid(X, Y)
    ax = Axes3D(fig)
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    print psd2D
    ax.plot_surface(X, Y, psd2D, rstride=1, cstride=1, cmap=cm.jet)
    '''
    # Inverse fft
    imm = np.fft.ifft2(F1)
    plt.figure(5)
    plt.clf()
    
    #print imm
    plt.imshow(imm.real, cmap=cm.gray)
    plt.show()




if __name__ == '__main__':
    main()